package com.example.common.app;

import android.content.Context;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.common.widget.convention.PlaceHolderView;

import org.jetbrains.annotations.NotNull;

import butterknife.ButterKnife;
import butterknife.Unbinder;

/**
 * @author:0.2℃
 * @date： 2021-12-17 00:27
 * @Description ：
 */
public abstract class Fragment extends androidx.fragment.app.Fragment {
    protected View mRoot;
    protected Unbinder mRootBinder;
    protected PlaceHolderView mPlaceholderView;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);

        // 初始化参数
        initArgs(getArguments());
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull @org.jetbrains.annotations.NotNull LayoutInflater inflater, @Nullable @org.jetbrains.annotations.Nullable ViewGroup container, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
        if (mRoot == null) {
            // 初始化当前根布局，但是不在创建的时候就添加到container中
            int layoutId = getContentLayoutId();
            View root = inflater.inflate(layoutId, container, false);
            initWidget(root);
            mRoot = root;
        } else {
            if (mRoot.getParent() != null) {
                // 把当前的Roo从其父控件中移除
                ((ViewGroup)mRoot.getParent()).removeView(mRoot);
            }
        }
        return mRoot;
    }

    @Override
    public void onViewCreated(@NonNull @NotNull View view, @Nullable @org.jetbrains.annotations.Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // 当View创建完成之后 初始化数据
        initData();
    }

    /**
     * 得到当前的资源文件id
     * @return 资源文件ID
     */
    protected abstract int getContentLayoutId();

    /**
     * 初始化控件
     * @param view
     */
    protected void initWidget(View view) {
        mRootBinder = ButterKnife.bind(this, view);
    }

    /**
     * 参数是否初始化成功
     */
    protected void initArgs(Bundle bundle) {
    }

    protected void initData() {

    }

    /**
     * 返回按键的时候触发
     * @return 返回true表示我已经处理返回逻辑，不需要activity自己finish()
     *          返回false代表我没有处理，activity自己处理
     */
    public boolean onBackPress() {
        return false;
    }

    /**
     * 设置占位布局
     * @param mPlaceholderView
     */
    public void setPlaceholderView(PlaceHolderView mPlaceholderView) {
        this.mPlaceholderView = mPlaceholderView;
    }
}
